/**
*      author: Y_Yao
*      created: 2024-12-08 13:04:45
**/

#include<bits/stdc++.h>

#define int LL
using namespace std;
using LL = long long;
const LL LLINF = 1e18;
const int INF = 0x3f3f3f3f;
const int N = 1000 + 7;
const int mod = 1000000007;
string a,b;
int n,m,k;
int dp[200+7][200+7] = {1};
int sum[200+7][200+7];

void solve()
{
    cin >> n >> m >> k;
    cin >> a;
    cin >> b;

    for(int i = 1;i <= n;i++)
    {
        for(int j = m;j >= 1;j--)
        {
            for(int h = k;h >= 1;h--)
            {
                sum[j][h] = a[i-1] == b[j-1] ? sum[j-1][h] + dp[j-1][h-1] : 0;
                dp[j][h] = (dp[j][h] + sum[j][h]) % mod; 
            }
        }
    }

    cout << dp[m][k] << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int t = 1;
    //cin >> t;
    while(t--)
    {
        solve();
    }
    return 0;
}


// #include<iostream>
// long long f[201][201]={1},sum[201][201],n,m,ki;
// char a[1001],b[201];
// int main(){
//     std::cin>>n>>m>>ki>>a>>b;
//     for(int i=1;i<=n;i++)
//       for(int j=m;j>=1;j--)
//         for(int k=ki;k>=1;k--)
//               f[j][k]=(f[j][k]+ (sum[j][k]= a[i-1]==b[j-1]? sum[j-1][k]+f[j-1][k-1] : 0))%1000000007;
//     std::cout<<f[m][ki];
// }